ef0823
@@ -51,7 +51,7 @@
import org.springframework.util.StringUtils;
  * strategies, augmented if necessary by the custom editors provided.
  *
  * <br/>
- * 
+ *
  * If you need to be able to parse and format local-specific dates and numbers,
  * you can inject formatters ({@link #setDateFormat(DateFormat)} and
  * {@link #setNumberFormat(NumberFormat)}).
@@ -114,13 +114,15 @@
public class DefaultJobParametersConverter implements JobParametersConverter {
 
 			if (key.endsWith(DATE_TYPE)) {
 				Date date;
-				try {
-					date = dateFormat.parse(value);
-				}
-				catch (ParseException ex) {
-					String suffix = (dateFormat instanceof SimpleDateFormat) ? ", use "
-							+ ((SimpleDateFormat) dateFormat).toPattern() : "";
-							throw new IllegalArgumentException("Date format is invalid: [" + value + "]" + suffix);
+				synchronized (dateFormat) {
+					try {
+						date = dateFormat.parse(value);
+					}
+					catch (ParseException ex) {
+						String suffix = (dateFormat instanceof SimpleDateFormat) ? ", use "
+								+ ((SimpleDateFormat) dateFormat).toPattern() : "";
+								throw new IllegalArgumentException("Date format is invalid: [" + value + "]" + suffix);
+					}
 				}
 				propertiesBuilder.addDate(StringUtils.replace(key, DATE_TYPE, ""), date, identifying);
 			}
@@ -164,13 +166,15 @@
public class DefaultJobParametersConverter implements JobParametersConverter {
 	 * Delegate to {@link NumberFormat} to parse the value
 	 */
 	private Number parseNumber(String value) {
-		try {
-			return numberFormat.parse(value);
-		}
-		catch (ParseException ex) {
-			String suffix = (numberFormat instanceof DecimalFormat) ? ", use "
-					+ ((DecimalFormat) numberFormat).toPattern() : "";
-					throw new IllegalArgumentException("Number format is invalid: [" + value + "], use " + suffix);
+		synchronized (numberFormat) {
+			try {
+				return numberFormat.parse(value);
+			}
+			catch (ParseException ex) {
+				String suffix = (numberFormat instanceof DecimalFormat) ? ", use "
+						+ ((DecimalFormat) numberFormat).toPattern() : "";
+						throw new IllegalArgumentException("Number format is invalid: [" + value + "], use " + suffix);
+			}
 		}
 	}
 
@@ -196,10 +200,14 @@
public class DefaultJobParametersConverter implements JobParametersConverter {
 			Object value = jobParameter.getValue();
 			if (value != null) {
 				if (jobParameter.getType() == ParameterType.DATE) {
-					result.setProperty(key + DATE_TYPE, dateFormat.format(value));
+					synchronized (dateFormat) {
+						result.setProperty(key + DATE_TYPE, dateFormat.format(value));
+					}
 				}
 				else if (jobParameter.getType() == ParameterType.LONG) {
-					result.setProperty(key + LONG_TYPE, longNumberFormat.format(value));
+					synchronized (longNumberFormat) {
+						result.setProperty(key + LONG_TYPE, longNumberFormat.format(value));
+					}
 				}
 				else if (jobParameter.getType() == ParameterType.DOUBLE) {
 					result.setProperty(key + DOUBLE_TYPE, decimalFormat((Double)value));
@@ -218,7 +226,9 @@
public class DefaultJobParametersConverter implements JobParametersConverter {
 	 */
 	private String decimalFormat(double value) {
 		if (numberFormat != DEFAULT_NUMBER_FORMAT) {
-			return numberFormat.format(value);
+			synchronized (numberFormat) {
+				return numberFormat.format(value);
+			}
 		}
 		return Double.toString(value);
 	}
